iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

首先先安裝套件

pip install line-bot-sdk

廢話不多說,先上程式碼

import json
from flask import Flask, request
from linebot import LineBotApi, WebhookHandler

app = Flask(__name__)
@app.route("/", methods=['POST'])
def get_reply():
    try:
        api = LineBotApi('<你的Channel access token>') #本篇暫時不會用到,但後續會用到
        handler = WebhookHandler('<你的channel secret>')
        body = request.get_data(as_text=True)
        json_data = json.loads(body)
        signature = request.headers['X-Line-Signature']
        handler.handle(body, signature)
        user_id = json_data['events'][0]["source"]['userId']
        text = json_data['events'][0]['message']['text']
        print(user_id, text)
    except Exception as e:
        print(e)
	return 'OK'

if __name__ == "__main__":
    app.run()

回到ngrok Domain設定頁面並點擊藍色的按鈕

https://ithelp.ithome.com.tw/upload/images/20230923/20146555LNxVSH2QxS.png

將你的domain網址複製下來

https://ithelp.ithome.com.tw/upload/images/20230923/20146555YzuR3FlsEb.png

(以下運行環境由linux進行演示)

這邊設定成功後,在第二個終端機輸入

ngrok http --domain=<your-domain> 5000

https://ithelp.ithome.com.tw/upload/images/20230923/20146555zxGS5c0Jze.png

結果如上,把紅色塗掉的網址複製下來,貼到LineBot機器人的Messaging API->Webhook settings->Webhook URL

底下的Use webhook記得要勾,不然不能使用

https://ithelp.ithome.com.tw/upload/images/20230923/20146555xxvPF8RXHh.png

貼上設定後按Verify並出現Success代表成功

https://ithelp.ithome.com.tw/upload/images/20230923/20146555TZs8xxLRN3.png

此時就可以把你的py檔跑起來啦


註1:

點擊網頁的"Verify"時終端機出現list index out of range是正常的,因為我們沒有傳訊息給機器人,沒有任何傳入的資料所以會報錯。

https://ithelp.ithome.com.tw/upload/images/20230923/201465556hDbRKXLhA.png

註2

LineBotSdkDeprecatedIn30: Call to deprecated class WebhookHandler. (Use 'from linebot.v3.webhook import WebhookHandler' instead. See https://github.com/line/line-bot-sdk-python/blob/master/README.rst for more details.) -- Deprecated since version 3.0.0.

若出現了以上錯誤,請忽略,單純line-bot-sdk的套件包寫法有改而已。

請在程式碼一開始新增幾行程式碼如下,並在app.run()的上面加上以下程式碼。

import warnings
from linebot import LineBotSdkDeprecatedIn30

'''
你的函式
'''

if __name__ == "__main__":
    warnings.filterwarnings("ignore", category=LineBotSdkDeprecatedIn30)
    app.run()

意思是讓python忽略類似的警示,再次執行警示就會消失了。


再次點擊你多頁訊息所設定的按鈕並發送的訊息時會看到終端機這邊出現你的userid與發送的訊息,這個方法適用於任何加入這個機器人的好友並且發送過訊息。

(不一定是要發送多頁訊息所設定的訊息,只要有發送訊息終端這邊都能接收userid)

https://ithelp.ithome.com.tw/upload/images/20230923/20146555TibOXU0Ot7.png


上一篇
[Day 12] 初見 Flask & ngrok
下一篇
[Day 14] Linebot 回覆訊息種類
系列文
用30天打好Python、LineBot的基礎&基本應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言